/**  
 * 项目名称: 客户中心
 * 包名: com.otc.uc.base.dao.impl
 * 文件名: BaseServiceImpl.java
 * 作者: wangshiping
 * 版本: v1.0
 * 日期: 2015年11月2日 下午3:13:37
 */
package com.yinkgh.mybatis.base.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.yinkgh.mybatis.base.dao.IBaseDao;
import com.yinkgh.mybatis.base.exception.BaseException;
import com.yinkgh.mybatis.base.model.BaseModel;
import com.yinkgh.mybatis.base.service.IBaseService;

/**
 * 类名称: BaseServiceImpl 类描述: 基础服务实现类 创建人: wangshiping 创建时间: 2015年11月2日 下午3:13:37
 * 修改人: 修改时间: 修改备注:
 * 
 * @version v1.0.0
 * 
 */
public class BaseServiceImpl<T> implements IBaseService<T> {

	private IBaseDao<T> dao;

	/**
	 * 描述: 子类重写方法
	 * 
	 * @param:
	 * @return: IBaseDao<T>
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:19:50
	 */
	public IBaseDao<T> getDao() {
		return dao;
	}

	/**
	 * 描述: 主键查询
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:21:15
	 * @see com.otc.uc.base.service.IBaseService#selectByPrimaryKey(java.lang.Object)
	 */
	public T selectByPrimaryKey(Object key) throws BaseException {
		return getDao().selectByPrimaryKey(key);
	}

	/**
	 * 描述: 主键修改
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:21:37
	 * @see com.otc.uc.base.service.IBaseService#updateByPrimaryKey(java.lang.Object)
	 */
	public Integer updateByPrimaryKey(T t) throws BaseException {
		return getDao().updateByPrimaryKey(t);
	}

	/**
	 * 描述: 主键删除
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:21:58
	 * @see com.otc.uc.base.service.IBaseService#deleteByPrimaryKeys(java.lang.Object[])
	 */
	public Integer deleteByPrimaryKeys(Object... keys) throws BaseException {
		int i = 0;
		for (Object key : keys) {
			i += getDao().deleteByPrimaryKey(key);
		}
		return i;
	}

	/**
	 * 描述: 选取最大ID
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:22:20
	 * @see com.otc.uc.base.service.IBaseService#insert(java.lang.Object)
	 */
	public Integer selectMaxId() throws BaseException {
		return getDao().selectMaxId();
	}

	/**
	 * 描述: 插入数据
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:22:20
	 * @see com.otc.uc.base.service.IBaseService#insert(java.lang.Object)
	 */
	public Integer insert(T t) throws BaseException {
		return getDao().insert(t);
	}

	/**
	 * 描述: 查询总行数
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:23:06
	 * @see com.otc.uc.base.service.IBaseService#selectByModelPagingCount(java.lang.Object)
	 */
	public Integer selectByModelPagingCount(T model) throws BaseException {
		return getDao().selectByModelPagingCount(model);
	}

	/**
	 * 描述: 查询Map总行数
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:23:37
	 * @see com.otc.uc.base.service.IBaseService#selectByMapCount(java.util.Map)
	 */
	public Integer selectByMapCount(Map<?, ?> map) throws BaseException {
		return getDao().selectByMapCount(map);
	}

	/**
	 * 描述: 模型分页查询
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:23:56
	 * @see com.otc.uc.base.service.IBaseService#selectByModelPaging(java.lang.Object)
	 */
	public List<T> selectByModelPaging(T model) throws BaseException {
		if (((BaseModel) model).getPager().getPaging()) {
			try {
				((BaseModel) model).getPager().setRowCount(selectByModelPagingCount(model));
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return getDao().selectByModelPaging(model);
	}

	/**
	 * 模型分页查询
	 * 
	 * @param model
	 * @return
	 * @throws BaseException
	 * @throws Exception 
	 */
	public JSONArray selectByModelPagingJson(T model) throws Exception {
		JSONArray data = new JSONArray();
		List dataList = selectByModelPaging(model);
		data = JSONArray.parseArray(JSON.toJSONString(dataList, true));
		return data;
	}

	/**
	 * 描述: Map查询
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:24:26
	 * @see com.otc.uc.base.service.IBaseService#selectByMap(java.util.Map)
	 */
	public List<T> selectByMap(Map<?, ?> map) throws BaseException {
		return getDao().selectByMap(map);
	}

	/**
	 * 描述: 实体查询
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:24:48
	 * @see com.otc.uc.base.service.IBaseService#selectByEntiry(java.lang.Object)
	 */
	public List<T> selectByEntiry(T entity) throws BaseException {
		return getDao().selectByEntiry(entity);
	}

	/**
	 * 描述: 实体删除
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:25:08
	 * @see com.otc.uc.base.service.IBaseService#deleteByEntity(java.lang.Object)
	 */
	public Integer deleteByEntity(T entity) throws BaseException {
		return getDao().deleteByEntity(entity);
	}

	/**
	 * 描述: SQL查询
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:25:24
	 * @see com.otc.uc.base.service.IBaseService#selectBySql(java.lang.String)
	 */
	public List<T> selectBySql(String sql) throws BaseException {
		return getDao().selectBySql(sql);
	}

	/**
	 * 描述: SQL修改
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:25:41
	 * @see com.otc.uc.base.service.IBaseService#updateBySql(java.lang.String)
	 */
	public Integer updateBySql(String sql) throws BaseException {
		return getDao().updateBySql(sql);
	}

	/**
	 * 描述: SQL删除
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:25:58
	 * @see com.otc.uc.base.service.IBaseService#deleteBySql(java.lang.String)
	 */
	public Integer deleteBySql(String sql) throws BaseException {
		return getDao().deleteBySql(sql);
	}

	/**
	 * 描述: SQL增加
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:26:20
	 * @see com.otc.uc.base.service.IBaseService#insertBySql(java.lang.String)
	 */
	public Integer insertBySql(String sql) throws BaseException {
		return getDao().insertBySql(sql);
	}

	/**
	 * 描述: 查询分页数
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:26:35
	 * @see com.otc.uc.base.service.IBaseService#selectByMapPagingCount(java.util.Map)
	 */
	public Integer selectByMapPagingCount(Map<?, ?> map) throws BaseException {
		return getDao().selectByMapPagingCount(map);
	}

	/**
	 * 描述: 查询分页
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:26:49
	 * @see com.otc.uc.base.service.IBaseService#selectByMapPaging(java.util.Map)
	 */
	public List<T> selectByMapPaging(Map map) throws BaseException {
		BaseModel model = (BaseModel) map.get("basemModel");
		model.setPagination("true");
		((BaseModel) model).getPager().setRowCount(selectByMapPagingCount(map));
		map.put("basemModel", model);
		return getDao().selectByMapPaging(map);
	}

	/**
	 * 描述: 根据主键删除一条记录
	 * 
	 * @param:
	 * @return:
	 * @author: wangshiping
	 * @date: 2015年11月2日 下午3:27:18
	 * @see com.otc.uc.base.service.IBaseService#deleteByPrimaryKey(java.lang.Object)
	 */
	public Integer deleteByPrimaryKey(Object key) throws BaseException {
		return getDao().deleteByPrimaryKey(key);
	}

	/**
	 * 获取流水号
	 * 
	 * @return
	 * @throws BaseException
	 */
	public Long getNextId() throws BaseException {
		HashMap<String, Long> map = new HashMap<String, Long>();
		getDao().getNextId(map);
		return map.get("result");
	}
}